Deployment of distributed solutions is a time and labor intensive task. By way of example, it can take multiple weeks for typical deployments. Virtual appliances can to significantly reduce the deployment effort required for distributed solutions. A virtual appliance is a packaging of pre-configured virtual machine (VM) images, along with the logic for deploying and reconfiguring the virtual machine images in a new environment. Manual creation of virtual appliances, however, is a complex and tedious activity, and existing automation approaches either operate at network level or require significant middleware knowledge.
By way of example, open virtualization format (OVF) tools require the appliance creator to have complete knowledge of products and solution configurations. Further, in such approaches, the appliance creator is expected to design the virtual appliance manually (that is, identify the variability points across environments, write scripts, write distributed configuration update workflows, etc.).
Other existing approaches include using a knowledge base about product configurations, wherein the knowledge is supplied by the product experts. In such approaches, however, the knowledge base is sub-optimal and does not consume knowledge at lower levels (for example, middleware libraries). Further, other existing approaches only support network level re-configurations without supporting operating system (OS) and middleware level re-configurations (for example, password/port changes).